/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.persistence;

import com.mindbox.mueblesalpes.negocio.entity.Ciudad;
import com.mindbox.mueblesalpes.negocio.entity.Departamento;
import com.mindbox.mueblesalpes.negocio.entity.Pais;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Jaimoto
 */
@Stateless
public class GeoServiceBean implements GeoServiceLocal {

    @PersistenceContext
    EntityManager em;

    @EJB
    PersistenciaLocal persistenciaService;

    @Override
    public List<Pais> getPaises(){
        try {
			String txtQuery = "SELECT p FROM Pais p ";
			Query query = null;
			query = em.createQuery(txtQuery);
			List aux = query.getResultList();
            if(aux == null || aux.isEmpty()){
                insertarDatosRegion();
                txtQuery = "SELECT p FROM Pais p ";
                query = em.createQuery(txtQuery);
                aux = query.getResultList();
            }
			return aux;
		} catch (Exception e) {
			e.printStackTrace();
			return new ArrayList();
		}
    }

    @Override
    public List<Ciudad> getCiudades(){
        try {
            String txtQuery = "SELECT p FROM Ciudad p ";
			Query query = null;
			query = em.createQuery(txtQuery);
			List aux = query.getResultList();
            if(aux == null || aux.isEmpty()){
                insertarDatosRegion();
                txtQuery = "SELECT p FROM Ciudad p ";
                query = em.createQuery(txtQuery);
                aux = query.getResultList();
            }
			return aux;
		} catch (Exception e) {
			e.printStackTrace();
			return new ArrayList();
		}
    }
    
    @Override
    public List<Departamento> getDepartamentos(){
        try {
            String txtQuery = "SELECT p FROM Departamento p ";
			Query query = null;
			query = em.createQuery(txtQuery);
			List aux = query.getResultList();
            if(aux == null || aux.isEmpty()){
                insertarDatosRegion();
                txtQuery = "SELECT p FROM Departamento p ";
                query = em.createQuery(txtQuery);
                aux = query.getResultList();
            }
			return aux;
		} catch (Exception e) {
			e.printStackTrace();
			return new ArrayList();
		}
    }



    /*
     * Realiza la inserción de los datos básicos de la region.
     * 
     */
    private void insertarDatosRegion() {
        //Paises
        Pais p1 = new Pais();
        p1.setPais("Argentina");

        //Departamentos
        //-Argentina
        Departamento argD1 = new Departamento();
        argD1.setNombre("Capital Federal");
        argD1.setPais(p1);

        //Ciudades
        Ciudad argc1 = new Ciudad();
        argc1.setNombre("Buenos Aires");
        argc1.setDepartamento(argD1);

        Pais p2 = new Pais();
        p2.setPais("Colombia");

        //Departamentos
        //-Colombia
        Departamento d1 = new Departamento();
        d1.setNombre("Cundinamarca");
        d1.setPais(p2);

        //Ciudades
        Ciudad c1 = new Ciudad();
        c1.setNombre("Bogotá");
        c1.setDepartamento(d1);

        Departamento d2 = new Departamento();
        d2.setNombre("Caldas");
        d2.setPais(p2);

        //Ciudades
        Ciudad c2 = new Ciudad();
        c2.setNombre("Manizales");
        c2.setDepartamento(d2);

        Ciudad c3 = new Ciudad();
        c3.setNombre("Anserma");
        c3.setDepartamento(d2);

        Departamento d3 = new Departamento();
        d3.setNombre("Tólima");
        d3.setPais(p2);

        Ciudad c4 = new Ciudad();
        c4.setNombre("Ibague");
        c4.setDepartamento(d3);

        Ciudad c5 = new Ciudad();
        c5.setNombre("Maracas");
        c5.setDepartamento(d3);

        persistenciaService.create(c1);
        persistenciaService.create(c2);
        persistenciaService.create(c3);
        persistenciaService.create(c4);
        persistenciaService.create(c5);
        persistenciaService.create(argc1);
    }

}
